home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / kob / kob001s.lzh / ped.has < prev    next >
Text File  |  1996-03-03  |  7KB  |  472 lines

  1.  
  2.     .include    doscall.mac
  3. *    .include    iocscall.mac
  4. *    .include    fefunc.h
  5.     .include    fdef.h
  6.  
  7.  
  8.     .text
  9.     .even
  10.  
  11.  
  12.     .dc.l    ret
  13.     .dc.l    ret
  14.     .dc.l    mem開放
  15.     .dc.l    mem開放
  16.     .dc.l    mem開放
  17.     .dc.l    ret
  18.     .dc.l    ret
  19.     .dc.l    ret
  20.     .dc.l    ptr_token
  21.     .dc.l    ptr_param
  22.     .dc.l    ptr_exec
  23.     .dc.l    0,0,0,0,0
  24.  
  25.  
  26. mem開放:
  27.     lea.l    _ped_ptr(pc),a0
  28.     move.l    (a0),-(sp)
  29.     ble    @f
  30.     DOS    _MFREE
  31.     clr.l    (a0)
  32. @@:
  33.     addq.l    #4,sp
  34.     clr.l    4(a0)        * ped_num
  35. ret:
  36.     rts
  37.  
  38.  
  39.  
  40. ptr_token:
  41.     .dc.b    'toroku_ped',0
  42.     .dc.b    'draw_ped',0
  43.     .dc.b    0
  44.     .even
  45. ptr_param:
  46.     .dc.l    p_read_ped
  47.     .dc.l    p_draw_ped
  48. ptr_exec:
  49.     .dc.l    e_read_ped
  50.     .dc.l    e_draw_ped
  51.  
  52.  
  53. p_read_ped:
  54.     .dc.w    $0038    * ary1_str
  55.     .dc.w    void_ret
  56.  
  57. p_draw_ped:
  58.     .dc.w    int_val    * wno
  59.     .dc.w    int_val    * #
  60.     .dc.w    int_val    * x
  61.     .dc.w    int_val    * y
  62.     .dc.w    void_ret
  63.  
  64.  
  65.  
  66. **    **    **    **    **    **    **    **    **    **
  67. error    .macro    mes,num
  68.     .local    l1
  69.     lea.l    l1(pc),a1
  70.     moveq    #num,d0
  71.     rts
  72. l1:    .dc.b    mes,0
  73.     .even
  74.     .endm
  75.  
  76.  
  77.  
  78.     .dc.w    irr_format-te
  79.     .dc.w    no_mem-te
  80.     .dc.w    not_exist_file-te
  81. te:
  82. toroku_ped_err:
  83.     add.w    d0,d0
  84.     move.w    te(pc,d0.w),d0
  85.     jmp    te(pc,d0.w)
  86.  
  87.  
  88. irr_format:
  89.     lea.l    irf1(pc),a1
  90.     lea.l    irf2(pc),a0
  91.     bra    1f
  92. not_exist_file:
  93.     lea.l    nef1(pc),a1
  94.     lea.l    nef2(pc),a0
  95. 1:
  96.     moveq    #29,d0
  97. @@:
  98.     move.b    (a2)+,(a0)+
  99.     dbeq    d0,@b
  100.     move.b    #'"',-1(a0)
  101.     clr.b    (a0)
  102.     moveq    #3,d0
  103.     rts
  104. nef1:    .dc.b    '指定のファイルがありません。"'
  105. nef2:    .ds.b    32
  106. irf1:    .dc.b    'PED ファイルのフォーマットがおかしいです "'
  107. irf2:    .ds.b    32
  108.     .even
  109.  
  110. yet_read_ped:
  111.     error    'すでに ped は読み込んでますよ',4
  112. no_mem:
  113.     error    'メモリを確保出来ませんでした',1
  114.  
  115. not_read_ped:
  116.     error    'ped を登録していません',5
  117. irregular_num:
  118.     error    'ped 番号が不正です',6
  119. no_data_ped:
  120.     error    'その番号には ped は登録されていません',7
  121. irregular_wno:
  122.     error    'Window Nunber がまずいです',2
  123.  
  124. **    **    **    **    **    **    **    **    **    **
  125.  
  126. return_zero:
  127.     moveq.l    #0,d0
  128. return_d0:
  129.     lea.l    fac(pc),a0
  130.     move.l    d0,6(a0)
  131.     moveq.l    #0,d0
  132.     rts
  133.  
  134.     .even
  135. fac:
  136.     .dc.w    0
  137.     .dc.l    0
  138.     .dc.l    0
  139.  
  140. **    **    **    **    **    **    **    **    **    **
  141. _ped_ptr:
  142.     .dc.l    0    * ptr ( 0,1,2,...,N )
  143.             * =0 の時未登録
  144. _ped_num:
  145.     .dc.l    0    * ped の個数 (=N)
  146. **    **    **    **    **    **    **    **    **    **
  147.  
  148.  
  149. _toroku_ped:
  150. e_read_ped:
  151.     move.l    _ped_ptr(pc),d0
  152.     bgt    yet_read_ped    * すでに登録済み
  153.  
  154.     movea.l    par1+6(sp),a2    * ファイル名リスト
  155.     addq.l    #6,a2
  156.     moveq    #0,d1
  157.     moveq    #0,d2
  158.     movem.w    (a2)+,d1/d2    * 各項のサイズ/添え字の大きさ
  159.  
  160.     move.l    #$c0_0000,-(sp)
  161.     DOS    _MALLOC
  162.     andi.l    #$ff_fff0,d0
  163.     move.l    d0,d7        * メモリ確保量
  164.     move.l    d0,(sp)
  165.     DOS    _MALLOC        * メモリ最大確保(後でSETBLOCKでサイズ再調整)
  166.     addq.l    #4,sp
  167.     movea.l    d0,a3
  168.     movem.l    d0/d2,_ped_ptr
  169.     *move.l    d2,_ped_num
  170.  
  171.     bsr    read_ped
  172.     bmi    toroku_ped_err
  173.  
  174.     movea.l    _ped_ptr(pc),a3
  175.     suba.l    a3,a4
  176.     movem.l    a3/a4,-(sp)
  177.     DOS    _SETBLOCK
  178.     addq.l    #8,sp
  179.  
  180.     bra    return_zero
  181.  
  182.  
  183.  
  184. **    **    **    **    **    **    **    **    **    **
  185.  
  186.  
  187.  * 読み込む
  188.  * a2 = file名list
  189.  * d1 = 各項のサイズ
  190.  * d2 = 項数 - 1
  191.  * a3 = buf先頭
  192.  * d7 = buf SIZE
  193. read_ped:
  194.  
  195.  * a3 = ped address list
  196.  * a4 = buf先頭
  197.     moveq    #4,d0
  198.     add.w    d2,d0
  199.     lsl.w    #2,d0
  200.     sub.l    d0,d7
  201.     bcs    read_ped_nomem_err
  202.     lea.l    (a3,d0.w),a4
  203.  
  204. read_ped_loop:
  205.         tst.b    (a2)
  206.         bne    @f
  207.             clr.l    (a3)+    * 登録されず
  208.             bra    1f
  209.     @@:
  210.         clr.w    -(sp)
  211.         move.l    a2,-(sp)
  212.         DOS    _OPEN
  213.         addq.l    #6,sp
  214.         move.l    d0,d6
  215.         bmi    read_ped_fileopen_err
  216.         clr.w    d5        * 
  217.  
  218.          * Sheet1
  219.         bsr    search_middle
  220.         bmi    read_ped_irregular_err
  221.         movea.l    a4,a5
  222.         bsr    get_sheet
  223.         bmi    read_ped_irregular_err
  224.         bne    read_ped_nomem_err
  225.  
  226.          * Sheet2
  227.         bsr    search_middle
  228.         bmi    read_ped_irregular_err
  229.         movea.l    a4,a6
  230.         bsr    get_sheet
  231.         bmi    read_ped_irregular_err
  232.         bne    read_ped_nomem_err
  233.  
  234.          * Sheet struct
  235.         bsr    search_middle
  236.         bmi    read_ped_irregular_err
  237.  
  238.         subi.l    #4*5,d7
  239.         bcs    read_ped_nomem_err
  240.         move.l    a4,(a3)+        * Sheet 登録
  241.  
  242.         bsr    get_dec            * h
  243.         bmi    read_ped_irregular_err
  244.         bsr    get_dec            * v
  245.         bmi    read_ped_irregular_err
  246.         bsr    get_dec            * hword
  247.         bmi    read_ped_irregular_err
  248.         move.l    a5,(a4)+        * sheet1
  249.         move.l    a6,(a4)+        * sheet2
  250.  
  251.         bsr    close_d6
  252. 1:
  253.     adda.l    d1,a2
  254.     dbra    d2,read_ped_loop
  255.  
  256.     moveq    #0,d0
  257.     rts
  258.  
  259.  
  260. read_ped_irregular_err:
  261.     moveq    #-3,d0
  262.     rts
  263. read_ped_nomem_err:
  264.     moveq    #-2,d0
  265.     rts
  266. read_ped_fileopen_err:
  267.     moveq    #-1,d0
  268.     rts
  269.  
  270.  
  271.  
  272.  
  273.  
  274. search_middle:    * '{' を探す
  275.     bsr    get1byte
  276.     beq    format_err
  277.     cmpi.b    #'{',d0
  278.     bne    search_middle
  279.     rts
  280.  
  281.  
  282.  
  283.  * ファイルを読んで 0x???? を (a4) に書き込んで行く
  284.  * '}' が出るまで。
  285. get_sheet:
  286.     bsr    get1byte
  287.     beq    format_err
  288.  
  289.     cmpi.b    #'x',d0
  290.     bne    @f
  291.         subq.l    #2,d7
  292.         bcs    memory_err
  293.         bsr    get_hex
  294.         move.w    d0,(a4)+
  295.         bra    get_sheet
  296. @@:
  297.     cmpi.b    #'}',d0
  298.     bne    get_sheet
  299.     rts
  300.  
  301.  
  302. get1byte:
  303.     subq.w    #1,d5
  304.     bcc    @f
  305.     lea.l    tmp,a1
  306.         pea.l    $400.w
  307.         move.l    a1,-(sp)
  308.         move.w    d6,-(sp)
  309.         DOS    _READ
  310.         lea.l    10(sp),sp
  311.         move.l    d0,d5
  312.         ble    1f
  313.     subq.w    #1,d5
  314. @@:
  315.     move.b    (a1)+,d0
  316.     rts
  317. 1:
  318.     moveq    #0,d0
  319.     rts
  320.  
  321.  
  322. get_dec:    * h, v, hword を得る
  323.     moveq    #0,d3
  324.     moveq    #0,d0
  325. @@:
  326.     bsr    get1byte
  327.     beq    1f
  328.     ext.w    d0
  329.     ext.l    d0
  330.     cmpi.w    #'0',d0
  331.     bcs    @b
  332.     cmpi.w    #'9',d0
  333.     bhi    @b
  334.     bra    2f
  335. @@:
  336.     bsr    get1byte
  337.     ext.w    d0
  338.     ext.l    d0
  339. 2:
  340.     subi.w    #'0',d0
  341.     bcs    1f
  342.     cmpi.w    #10,d0
  343.     bcc    1f
  344.         add.l    d3,d3    * d3*10+d0
  345.         add.l    d3,d0
  346.         lsl.l    #2,d3
  347.         add.l    d0,d3
  348.         bra    @b
  349. 1:
  350.     move.l    d3,(a4)+
  351.     cmpi.b    #','-'0',d0
  352.     beq    1f
  353. @@:
  354.     bsr    get1byte
  355.     beq    format_err
  356.     cmpi.b    #',',d0
  357.     bne    @b
  358. 1:
  359.     rts
  360.  
  361.  
  362. get_hex:
  363.     moveq    #0,d3
  364. @@:
  365.     bsr    get1byte
  366.     ext.w    d0
  367.     ext.l    d0
  368.     ori.b    #$20,d0
  369.     subi.w    #'0',d0
  370.     bcs    1f
  371.     cmpi.w    #10,d0
  372.     bcs    2f
  373.     subi.w    #'a'-'0'-10,d0
  374.     cmpi.w    #$10,d0
  375.     bcc    1f
  376. 2:
  377.         lsl.l    #4,d3
  378.         add.l    d0,d3
  379.         bra    @b
  380. 1:
  381.     move.l    d3,d0
  382.     rts
  383.  
  384.  
  385. format_err:
  386.     bsr    close_d6
  387.     moveq    #-1,d0
  388.     rts
  389. memory_err:
  390.     bsr    close_d6
  391.     moveq    #1,d0
  392.     rts
  393. close_d6:
  394.     move.w    d6,-(sp)
  395.     DOS    _CLOSE
  396.     addq.l    #2,sp
  397.     rts
  398.  
  399.  
  400. **    **    **    **    **    **    **    **    **    **
  401.  
  402. DPut        equ    2
  403.  
  404.  
  405. _draw_ped:
  406. e_draw_ped:
  407.     move.l    _ped_ptr(pc),d0
  408.     ble    not_read_ped
  409.     movea.l    d0,a2
  410.  
  411.     move.l    par1+6(sp),d0        * wno
  412.     lsl.w    #2,d0
  413.     move.l    (a3,d0.w),d4        * _bwp[d0] = WP
  414.     beq    irregular_wno
  415.  
  416.     move.l    par2+6(sp),d2        * ped NUMBER
  417.     bmi    irregular_num
  418.     cmp.l    _ped_num(pc),d2
  419.     bhi    irregular_num
  420.     lsl.w    #2,d2
  421.     move.l    (a2,d2.w),d3        * Sheet
  422.     beq    no_data_ped
  423.  
  424.     move.l    par3+6(sp),d1        * x
  425.     move.l    par4+6(sp),d2        * y
  426.  
  427.     lea.l    DrawBuf(pc),a0
  428.     moveq    #DPut,d0
  429.     movem.l    d0/d1/d2/d3,(a0)
  430.  
  431.     pea.l    1.w
  432.     movem.l    d4/a0,-(sp)    * WP/DBUF
  433.     movea.l    (a4),a0        * _WindowDraw
  434.     jsr    (a0)
  435.     lea.l    4*3(sp),sp
  436.  
  437.     bra    return_zero
  438.  
  439. DrawBuf:
  440.     .ds.b    28
  441.  
  442.  
  443. **    **    **    **    **    **    **    **    **    **
  444. .if 0
  445. file_exist:
  446.     lea.l    -56(sp),sp
  447.     move.w    #$23,-(sp)    * A***HR
  448.     move.l    a0,-(sp)
  449.     pea.l    6(sp)
  450.     DOS    _FILES
  451.  
  452.     tst.l    d0
  453.     bmi    nofile
  454.  
  455.     move.l    10+26(sp),d0    *file_size
  456. *    move.l    10+22(sp),d1    *file_date&time
  457. fe:
  458.     lea.l    10+56(sp),sp
  459.     rts
  460.  
  461. nofile:
  462.     moveq.l    #0,d0
  463.     bra    fe
  464. .endif
  465.  
  466.  
  467. **    **    **    **    **    **    **    **    **    **
  468.     .bss
  469. tmp:
  470.     .ds.b    1024
  471.     .end
  472.